想像一下:你家裡有很多「遙控器」📺🕹️
在 Go 裡,interface 就是用來規定某個東西「必須要有的功能」,而不是在乎它「是哪一種東西」。
比如說:
來一個最簡單的範例:
package main
import "fmt"
// 定義一個 interface,叫做 Opener(就是能打開的東西)
type Opener interface {
Open()
}
// 定義一個「書本」結構
type Book struct{}
// 書本也會 Open
func (b Book) Open() {
fmt.Println("打開書本 📖")
}
// 定義一個「門」
type Door struct{}
func (d Door) Open() {
fmt.Println("打開大門 🚪")
}
func main() {
// 這裡我用 interface 變數,裝不一樣的東西
var o Opener
o = Book{}
o.Open() // 打開書本
o = Door{}
o.Open() // 打開大門
}
👉 執行結果:
打開書本 📖
打開大門 🚪
是不是很像「同一個遙控器」可以控制「不一樣的東西」?
想像一下,如果沒有 interface:
但如果用 interface,我們只需要記得:
「喂,只要你會
Open()
,我就能控制你!」
這樣程式碼更簡單、不怕變動。
比喻:
「只要你承諾會跳舞💃,我就能邀請你來舞池;不管你是阿明還是小華,都沒差!」